#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
交互式提示词工程演示
展示如何使用交互式反馈和历史记录管理功能
"""

import asyncio
from src.research_core import (
    create_prompt_engineering_workflow_with_feedback,
    PromptEngineeringState,
    InteractivePromptEngineering
)


async def demo_interactive_prompt_engineering():
    """演示交互式提示词工程功能"""
    print("=== 交互式提示词工程功能演示 ===\n")
    
    # 创建工作流和交互式工程实例
    workflow = create_prompt_engineering_workflow_with_feedback()
    interactive_eng = InteractivePromptEngineering()
    
    # 定义需求
    requirement = """
    我需要一个能够帮助用户进行文本摘要的AI助手提示词。这个助手应该能够：
    1. 理解用户提供的长文本内容
    2. 提取关键信息并生成简洁的摘要
    3. 保持原文的核心观点和重要细节
    4. 根据不同需求调整摘要长度（短、中、长）
    5. 适应不同类型的文本（新闻、论文、报告等）
    """
    
    # 初始化状态
    initial_state = PromptEngineeringState(
        requirement=requirement,
        requirement_analysis="",
        current_prompt=None,
        human_feedback=None,
        feedback_history=[],
        optimization_goal="提高提示词在文本摘要任务中的准确性和适应性",
        prompt_evaluation=None,
        final_prompt=None,
        design_reasoning=None,
        iteration_count=0,
        workflow_complete=False,
        human_intervened=False,
        current_stage="start",
        quality_score=0.0,
        execution_time={},
        context_info={},
        metadata={},
        ab_test_results=None,
        performance_metrics=[],
        user_feedbacks=[],
        optimization_history=[],
        prompt_versions={},
        test_results=None,
        user_preferences={},
        domain_context=None,
        interaction_history=[],
        personalization_settings={},
        template_recommendations=[],
        quality_evaluation_details=None,
        ab_test_variants=[],
        quality_history=[]
    )
    
    # 执行工作流
    print("1. 执行基础提示词工程工作流...")
    result = workflow.invoke(initial_state)
    
    # 将结果转换为PromptEngineeringState类型
    result_state = PromptEngineeringState(**result)
    
    # 保存第一个版本
    print("2. 保存初始版本...")
    version_updates = interactive_eng.save_prompt_version(result_state, "initial_version")
    result.update(version_updates)
    
    print("   已保存版本: initial_version")
    
    # 模拟人工反馈
    print("3. 模拟收集人工反馈...")
    feedback_result = interactive_eng.collect_interactive_feedback(result_state)
    print(f"   反馈收集状态: {feedback_result.get('feedback_collection_status')}")
    print(f"   支持的反馈类型: {feedback_result.get('supported_feedback_types')}")
    
    # 添加反馈到状态
    result["human_feedback"] = "摘要的结构很好，但希望增加对关键数字和日期的保留能力"
    result["human_intervened"] = True
    
    # 将结果转换为PromptEngineeringState类型以供下次调用
    result_state = PromptEngineeringState(**result)
    
    # 重新执行工作流以处理反馈
    print("4. 重新执行工作流以处理反馈...")
    result = workflow.invoke(result_state)
    
    # 将结果转换为PromptEngineeringState类型
    result_state = PromptEngineeringState(**result)
    
    # 保存优化后的版本
    print("5. 保存优化后的版本...")
    version_updates = interactive_eng.save_prompt_version(result_state, "optimized_version")
    result.update(version_updates)
    print("   已保存版本: optimized_version")
    
    # 显示结果
    print("\n" + "="*60)
    print("最终结果:")
    print("="*60)
    
    print("\n需求分析:")
    print(result.get("requirement_analysis", "无分析结果"))
    
    print("\n最终生成的提示词:")
    print(result.get("final_prompt", "无提示词生成"))
    
    print("\n设计说明:")
    print(result.get("design_reasoning", "无设计说明"))
    
    print("\n提示词版本历史:")
    prompt_versions = result.get("prompt_versions", {})
    for version_name, content in prompt_versions.items():
        print(f"  - {version_name}: {len(content)} 字符")
    
    print("\n反馈历史:")
    for feedback in result.get("feedback_history", []):
        print(f"  - {feedback['type']}反馈 ({feedback['timestamp']}): {feedback['content']}")
    
    print(f"\n最终质量评分: {result.get('quality_score', 0.0)}")
    
    # 比较版本
    print("\n6. 比较不同版本...")
    if len(prompt_versions) >= 2:
        version_names = list(prompt_versions.keys())
        comparison_result = interactive_eng.compare_prompt_versions(
            result_state, version_names[0], version_names[1]
        )
        comparison = comparison_result.get("comparison_result", {})
        print(f"   比较版本: {comparison.get('version_a', {}).get('name')} vs {comparison.get('version_b', {}).get('name')}")
        diff = comparison.get('differences', {})
        print(f"   内容是否有差异: {diff.get('has_content_difference', False)}")
        print(f"   长度差异: {diff.get('length_difference', 0)} 字符")


async def main():
    """主函数"""
    await demo_interactive_prompt_engineering()


if __name__ == "__main__":
    asyncio.run(main())